import { getEmplyeeBaseInfo, getUserBaseInfo, login } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'

export default {
  // 命名空间,指定模块名来调用方法
  namespaced: true,
  state: {
    // 定义token数据
    token: getToken(),
    userInfo: {}
  },
  mutations: {
    // 定义,存/清楚token的方法
    setToken(state, token) {
      state.token = token
      setToken(token)
    },
    removeToken(state) {
      state.token = null
      removeToken()
    },
    // 定义设置和清楚方法
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    removeUserInfo(state) {
      state.userInfo = {}
    }

  },
  actions: {
    // 定义发请求的action
    async login(context, data) {
      // try {
      // // try catch的作用：当程序发生错误时，能够保证程序继续执行下去。
      // // 状态码 4XX,是前段错误
      // // 状态码 5XX,是后段错误
      // // 状态码 2XX,数据当中success来代表错误
      // // :{}层层解构, 获取对象里面的东西
      // // :token,变量名,改名称,把获取之后改个变量名
      //   const { data: { success, data: token, message }} =
      // await login(data)
      // // 判断请求是否成功
      //   if (success) {
      //     // 如果成功了,存储数据
      //     context.commit('setToken', token)
      //     Message.success('登录成功!')
      //   } else {
      //   // 在js当中没办法直接this.$xxx 来获取组件的东西
      //     Message.error(message)
      //   }
      // } catch (error) {
      //   Message.error('服务器出错,请稍后再试!')
      // }
      const token = await login(data)
      context.commit('setToken', token)
    },
    logout(context) {
      context.commit('removeToken')
      // 退出时清空数据
      context.commit('removeUserInfo')
    },
    async getUserInfo(context) {
      const u = await getUserBaseInfo()
      const e = await getEmplyeeBaseInfo(u.userId)
      const o = { ...u, ...e }
      // 模拟找不到图片
      // o.staffPhoto = 'http://q6cu3t6jv.bkt.clouddn.com/1063705989926227968?t=1582797590950'
      /*  模拟数据: 设置null时不会出发onerror事件,但是会触发钩子函数update
          如果数据最开始就为null 不会触发钩子函数update
          */
      o.staffPhoto = null
      context.commit('setUserInfo', o)
    }
  }
}
